//引入公共函数
let util = require('../../utils/util');

//获取请求的域名地址
let requestDomain = util.config('requestDomain');

//存放页面实例
let that;

//页面Page函数
Page({

    //页面公共数据
    data: {

        //显示的商户名称
        storeName: '',

        //登录流程状态
        loginStatus: 'check',

        loginReady: false

    },

    /**
     * 页面加载时触发
     */

    onLoad: function(params) {

        //获得页面实例
        that = this;

        console.log(params);

        console.log('场景值为' + util.globalData('sceneId'));

        let logined = wx.getStorageSync('logined');

        let goCurrent = function () {
            //跳转页面到我的足迹页面
            wx.redirectTo({

                //指定跳转的页面
                url: "../currentStoreList/currentStoreList",

                //跳转失败
                fail: function () {

                    //显示跳转失败的错误提示
                    util.showError('跳转失败', '跳转到我的足迹失败，请重新启动小程序');

                }
            });
        }

        if(params.logout) {
            return;
        }
        else if (logined && !params.tableNum && Date.now() - logined.timestamp < 1800000) {
            params.storeId = logined.storeId;
            params.tableNum = logined.tableNum;
        }
        else if (!util.globalData('sceneId')) {

            if (!params.storeId || !params.tableNum) {
                
                goCurrent();
                //跳出登录
                return;
            }
        }
        else {
            
            switch (parseInt(util.globalData('sceneId'))) {
                //扫描二维码
                case 1011:
                    if (!params.storeId || !params.tableNum) {

                        //跳出登录
                        return;

                    }
                break;
                //扫描小程序码
                case 1047:
                    if (!params.storeId || !params.tableNum) {
                        
                        //跳出登录
                        return;

                    }
                break;
                default: 
                    goCurrent();
                    return;
            }
        }

        that.setData({ loginReady: true });
            
        //存放扫描的商户ID
        util.globalData('storeId', params.storeId);

        //存放扫描的商户内的桌位号
        util.globalData('tableNum', params.tableNum);

        //存储登录状态
        wx.setStorage({
            key: 'logined',
            data: {
                storeId: params.storeId,
                tableNum: params.tableNum,
                timestamp: Date.now()
            }
        });

        if(params.storeId != wx.getStorageSync('storeId')) {

            wx.clearStorageSync();

            //将本次所访问的商户ID记录下来
            wx.setStorageSync('storeId', params.storeId);

        }
        
        //检测登录情况并获取商户信息
        that.checkLogin();

    },

    /**
     * 当页面再次显示时判断是否已经执行了登录并且有商店数据，防止未跳转
     */

    onShow: function() {

        //尝试获取商户数据
        var storeData = util.globalData('storeData');

        //判断商户数据是否已获得且已经在登录状态
        if(storeData.storeName && util.status('logined')) {
            
            //跳转到点餐页面
            wx.switchTab({
            
                //指定跳转的页面
                url: '../commodity/commodity',
                
                //跳转失败
                fail: function() {
                    
                    //显示跳转失败的错误
                    util.showError('初始化失败', '请重新启动小程序');
                }

            });
        }
    },

    /**
     * 检测登录状态并获取商户数据的函数
     */

    checkLogin: function() {

        wx.showNavigationBarLoading();

        //显示识别中的提示
        wx.showToast({
            title: '识别商户中',
            icon: 'loading',
            mask: true,
            duration: 10000
        });

        //设置当前登录流程状态为正在检查
        that.setData({loginStatus: 'check'});

        //发起请求获取商户名称
        wx.request({
            
          //指定获取商户信息的接口地址  
          url: requestDomain + 'store/getStoreData',
          
          //请求获取商户信息接口的参数
          data: {

              //商户ID
              storeId: util.globalData('storeId')
          
          },
          
          method: 'POST',
          
          //请求接口成功
          success: function(result){

              wx.hideToast();

              //显示识别中的提示
              wx.showToast({
                title: '请稍后',
                icon: 'loading',
                mask: true,
                duration: 10000
              });

              //判断商户数据是否处理成功
              if(util.checkSuccess(result) && result.data && result.data.data) {
                
                //将商户数据存放到公共数据
                util.globalData('storeData', result.data.data);
                
                //更新商户名称到登录界面上
                that.setData({storeName: result.data.data.storeName});

                //从本地存储取出3rdSession
                let _3rdSession = wx.getStorageSync('_3rdSession');
                console.log('3rdSession为' + _3rdSession);

                wx.checkSession({
                    success: function() {
                        console.log('发起检测登录状态请求');
                        //发起检测服务器端登录状态请求，附带3rdSession
                        wx.request({
                            url: requestDomain + 'user/checkLogin',
                            data: {
                                storeId: util.globalData('storeId'),

                                _3rdSession: _3rdSession,

                                identity: 'user'
                            },
                            method: 'POST',
                            success: function(result){
                                console.log('请求完成，结果为' + result);
                                console.log(result);
                                //检查返回数据的的errCode是否为为0
                                if(util.checkSuccess(result) && result.data && result.data.data) {
                                    //在服务器上已在登录状态
                                    console.log('用户已在登录状态');
                                    wx.login({
                                        success: function(res){
                                            wx.getUserInfo({
                                                success: function(userData){
                                                    console.log(result);

                                                    wx.showToast({
                                                        title: '授权成功',
                                                        icon: 'success',
                                                        mask: true
                                                    });

                                                    util.globalData('userData', userData.userInfo);

                                                    util.globalData('storeData', result.data.data.storeData);

                                                    //设置500毫秒后跳转到点餐界面
                                                    setTimeout(function() {
                                                        //跳转到点餐页面
                                                        wx.switchTab({

                                                            //跳转的页面
                                                            url: '../commodity/commodity',
                                                            
                                                            //跳转失败
                                                            fail: function() {
                                                                util.showError('初始化失败', '请重新启动小程序');
                                                            }

                                                        });
                                                    }, 500);
                                                },
                                                fail: function(res) {
                                                    util.showError('获取信息失败', '获取用户信息失败');
                                                    //设置登录流程状态为检测失败允许按下按钮重试
                                                    that.setData({loginStatus: 'checkFailed'});
                                                }
                                            })
                                        },
                                        fail: function(res) {
                                            wx.hideNavigationBarLoading();
                                            //隐藏检测登录状态加载框
                                            wx.hideToast();
                                            util.showError('登录失败', '进行微信登录时发生错误');
                                            //设置登录流程状态为检测失败允许按下按钮重试
                                            that.setData({loginStatus: 'checkFailed'});
                                        }
                                    });
                                }
                                else if(util.checkSuccess(result, ['-0004'])) {
                                    wx.hideNavigationBarLoading();
                                    //隐藏检测登录状态加载框
                                    wx.hideToast();
                                    //在服务器上未在登录状态
                                    console.log('用户未登录');
                                    //设置登录流程状态为需要进行登录，点击按钮开始登录
                                    that.setData({loginStatus: 'needLogin'});  
                                }
                                else {
                                    wx.hideNavigationBarLoading();
                                    //隐藏检测登录状态加载框
                                    wx.hideToast();
                                    //返回的错误
                                    console.log('获取状态出错：' + result.data.errCode);
                                    util.showError('获取状态出错', '从服务器获取登录状态出错:' + result.data.errMsg, result.data.errCode);
                                    //设置登录流程状态为检测失败允许按下按钮重试
                                    that.setData({loginStatus: 'checkFailed'});
                                }
                            },
                            fail: function() {
                                //检测登录状态请求出错
                                console.log('请求失败，结果为' + result);
                                wx.hideNavigationBarLoading();
                                wx.hideToast();
                                util.showError('请求失败', '请求检测登录状态失败');
                                //设置登录流程状态为检测失败允许按下按钮重试
                                that.setData({loginStatus: 'checkFailed'});
                            }
                        });
                    },
                    fail: function() {
                        wx.hideNavigationBarLoading();
                        wx.hideToast();
                        //设置登录流程状态为需要进行登录，点击按钮开始登录
                        that.setData({loginStatus: 'needLogin'});  
                    }
                });
              }
              else {

                  wx.hideNavigationBarLoading();

                  //隐藏识别中的提示
                  wx.hideToast();

                  //显示识别失败的错误提示
                  util.showError('识别商户失败', '处理商户数据时发生错误[' + result.data.errMsg + ']', result.data.errCode);

                  //设置登录流程状态为检测失败允许按下按钮重试
                  that.setData({loginStatus: 'checkFailed'});

              }
          },

          //发起识别商户请求失败
          fail: function() {

              wx.hideNavigationBarLoading();

              //隐藏识别中的提示
              wx.hideToast();

              //显示发起识别商户请求失败的错误提示
              util.showError('识别商户失败', '发起识别商户请求失败');

              //设置登录流程状态为检测失败允许按下按钮重试
              that.setData({loginStatus: 'checkFailed'});

          }
        });
    },

    /**
     * 开始登录函数
     */

    login: function() {

        wx.showNavigationBarLoading();
        
        //设置当前登录流程状态为授权中
        that.setData({loginStatus: 'checkAuth'});

        //执行微信登录操作
        wx.login({
          success: function(loginData) {
            console.log('执行微信登录操作成功');

            //请求的数据
            let  requestData = {};

            //获得code
            requestData.wxCode = loginData.code;
            console.log('成功获得登录code '  + requestData.wxCode);

            //获取用户信息
            wx.getUserInfo({

              success: function(userData) {
                console.log('获取用户信息成功');
                console.log(userData);

                //获得加密数据
                requestData.wxEncryptedData = userData.encryptedData;

                //获得iv向量
                requestData.wxIv = userData.iv;

                //获得商户ID
                requestData.storeId = util.globalData('storeId');

                //获得桌号
                requestData.tableNum = util.globalData('tableNum');

                //设置身份为用户
                requestData.identity = 'user';

                console.log('准备向自己服务器发起登录请求');
                //发起登录请求，需要三个参数如上
                wx.request({

                  url: requestDomain + 'user/login',

                  data: requestData,

                  method: 'POST',

                  success: function(loginData){
                    console.log('登录请求完成');
                    console.log(loginData);
                    
                    wx.hideNavigationBarLoading();

                    //检查返回数据的的errCode是否为为0
                    if(util.checkSuccess(loginData)) {

                      //获得登录数据
                      loginData = loginData.data.data;
                      console.log('loginData', loginData);

                      //取出3rdSession
                      var _3rdSession = loginData._3rdSession;

                      //存放3rdSession到公共变量以备使用
                      util.globalData('_3rdSession', _3rdSession);

                      console.log(_3rdSession);

                      console.log('登录成功,3rdSession:' + _3rdSession);

                      //存入3rd_session
                      wx.setStorageSync('_3rdSession', _3rdSession);

                      console.log('已存入3rdSession');

                      wx.showToast({
                        title: '授权成功',
                        icon: 'success',
                        mask: true
                      });

                      util.globalData('userData', userData.userInfo);

                      util.globalData('storeData', loginData.storeData);

                      //设置500毫秒后跳转到点餐界面
                      setTimeout(function() {
                          //跳转到点餐页面
                          wx.switchTab({

                              //跳转的页面
                              url: '../commodity/commodity',
                            
                              //跳转失败
                              fail: function() {
                                  util.showError('初始化失败', '请重新启动小程序');
                              }

                          });
                      }, 500);
                    }
                    else {
                        //登录失败
                        console.log('登录时发生了错误[' + _3rdSession.data.errCode + ']：' + _3rdSession.data.errMsg);
                    }

                  },

                  fail: function() {
                    wx.hideNavigationBarLoading();
                    //发生登录请求时发生错误
                    console.log('自服务器登录接口请求失败');
                    util.showError('接口请求失败', '自服务器登录接口请求失败');
                  }
                })
              },
              fail: function() {
                wx.hideNavigationBarLoading();
                //获取用户数据失败
                console.log('获取用户信息失败');
                util.showError('获取用户信息失败', '无法取得用户信息');
              }
            });
          },
          fail: function() {
            wx.hideNavigationBarLoading();
            //微信登录操作失败
            console.log('执行微信登录操作失败');
            util.showError('登录失败', '执行微信登录操作失败');
          }
        });
    }
});